package cn.wolfcode.wolf2w.business.service.impl;

import cn.wolfcode.wolf2w.business.api.domain.Region;
import cn.wolfcode.wolf2w.business.mapper.RegionMapper;
import cn.wolfcode.wolf2w.business.query.RegionQuery;
import cn.wolfcode.wolf2w.business.service.IRegionService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 区域Service业务层处理
 * 
 * @author yuhao
 * @date 2025-09-16
 */
@Service
@Transactional
public class RegionServiceImpl extends ServiceImpl<RegionMapper,Region> implements IRegionService {

    @Override
    public IPage<Region> queryPage(RegionQuery qo) {
        IPage<Region> page = new Page<>(qo.getCurrentPage(), qo.getPageSize());
        return lambdaQuery()
                .page(page);
    }

    @Override
    public List<Region> queryRegions(Long ishot) {

        return lambdaQuery().eq(Region::getIshot,ishot)
                .orderByAsc(Region::getSeq)
                .list() ;
//lambdaQuery(): 这是 MyBatis-Plus 提供的 Lambda 查询构造器，用于构建类型安全的查询条件。
//eq(Region::getIshot, ishot): 设置查询条件，表示查询 ishot 字段等于传入参数 ishot 的记录。
// 这里使用了 Java 8 的方法引用语法，Region::getIshot 指向 Region 实体类的 ishot 属性。
//orderByAsc(Region::getSeq): 对查询结果按照 seq 字段进行升序排序。
//list(): 执行查询并返回结果列表。



//            default Children eq(R column, Object val) {
//        return (Children)this.eq(true, column, val);
//    }

//        default: 这是一个 Java 8 的默认方法，允许在接口中提供默认实现
//Children: 泛型返回类型，表示当前查询构造器的子类类型，支持链式调用
//R: 泛型参数，表示数据库列对应的实体类字段类型
//eq: 方法名，表示"equal"（等于）条件查询
//方法逻辑：
//该方法接收两个参数：column（列字段）和 val（比较值）
//调用另一个重载的 eq(true, column, val) 方法
//第一个参数 true 是一个条件判断标志，表示始终应用此查询条件
//通过 (Children)this 进行类型转换，保持链式调用的连续性
//作用：
//构建 SQL 查询中的 WHERE column = val 条件
//支持 Lambda 表达式方式的类型安全查询
//返回 Children 类型以支持方法链式调用（如 query.eq().orderBy().list()）
    }
}
